﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using BusinessLayer.Clases_Seguridad_BO;
using EntityLayer;

namespace proyGestionActivos
{
    public partial class FrmNuevoGrupo : System.Web.UI.Page
    {

        string idSeguridad = ConfigurationManager.AppSettings["Seguridad"];

        clsOpcionBL opcionLogic = new clsOpcionBL();
        clsGrupoBL grupoLogic = new clsGrupoBL();

        List<T_Opcion> treeItems;
        List<T_Opcion> treeItemsChild;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                this.CargarArbol(opcionLogic.ObtenerOpcionesPorGrupo(0));
            }
        }

        protected void CargarArbol(List<int> list)
        {
            treeItems = this.opcionLogic.Listar();
            if (treeItems.Count > 0)
            {
                this.LlenarOpciones(null, null, this.tvOpciones, list);
            }
            this.tvOpciones.ExpandAll();
        }

        public void LlenarOpciones(int? codigoPadre, TreeNode node, TreeView tree, List<int> list)
        {
            treeItemsChild = treeItems.FindAll(delegate(T_Opcion item) { return (item.ID_PADRE == codigoPadre); });

            foreach (T_Opcion hijos in treeItemsChild)
            {
                TreeNode newNode = new TreeNode(hijos.DES_NOMBRE, hijos.ID_OPCION.ToString());

                if (list.Contains(hijos.ID_OPCION))
                {
                    newNode.Checked = true;
                }

                if (codigoPadre == null) tree.Nodes.Add(newNode);
                else node.ChildNodes.Add(newNode);
                this.LlenarOpciones(hijos.ID_OPCION, newNode, null, list);
            }
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            this.Grabar();
        }

        private void listarNombreGrupo()
        {
            grupoLogic.listarGrupo2();
        }

        private void Grabar()
        {
            try
            {
                bool flag = false;
                List<T_Grupo> listaGrupo = new List<T_Grupo>();
                clsGrupoBL neggrupo = new clsGrupoBL();
                if (txtDscGrupo.Text == String.Empty || txtNombreGrupo.Text == String.Empty || cboEstado.SelectedIndex == 0)
                {
                    string script = "ShowCreateAccountWindow7();";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
                }
                else
                {
                    listaGrupo = grupoLogic.listarGrupo2();
                    foreach (T_Grupo item in listaGrupo)
                    {
                        if (item.DES_NOMBRE.ToUpper() == txtNombreGrupo.Text.ToUpper())
                        {
                            flag = true;
                        }
                    }

                    if (flag)
                    {
                        string scriptErrorDescripcion = "ShowCreateAccountWindow4();";
                        ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptErrorDescripcion, true);
                    }
                    else
                    {
                        T_Grupo grupo = new T_Grupo();
                        //int cod = neggrupo.ObtenerIdGrupoMax();
                        //grupo.ID_GRUPO = cod;
                        grupo.DES_NOMBRE = txtNombreGrupo.Text;
                        grupo.DES_DESCRIPCION = txtDscGrupo.Text;
                        grupo.IND_ESTADO = cboEstado.Text.Substring(0, 1);
                        grupo.USR_CREACION = ((T_Usuario)Session["SesionUser"]).ID_USUARIO;
                        //grupo.USR_CREACION = ((t_usuario)Session[DatosSesion.User]).ID_USUARIO;
                        grupo.USR_ACTUALIZO = "";

                        if (neggrupo.GrabarGrupo(grupo, ObtenerNodoSeleccionados(this.tvOpciones)) != 0)
                        {
                            string script = "ShowOK();";
                            ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", script, true);
                        }
                        else
                        {
                            string scriptError = "ShowCreateAccountWindow4();";
                            ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", scriptError, true);
                        }

                    }

                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static List<int> ObtenerNodoSeleccionados(TreeView tv)
        {
            List<int> list = new List<int>();

            foreach (TreeNode tn in tv.Nodes)
            {
                if (tn.Checked)
                {
                    list.Add(int.Parse(tn.Value));
                }
                if (tn.ChildNodes.Count > 0)
                {
                    foreach (TreeNode cTn in tn.ChildNodes)
                    {
                        list.AddRange(ObtenerNodoHijoRecursivo(cTn));
                    }
                }
            }
            return list;
        }

        public static List<int> ObtenerNodoHijoRecursivo(TreeNode tn)
        {
            List<int> list = new List<int>();
            if (tn.Checked)
            {
                list.Add(int.Parse(tn.Value));
            }
            if (tn.ChildNodes.Count > 0)
            {
                foreach (TreeNode tnC in tn.ChildNodes)
                {
                    list.AddRange(ObtenerNodoHijoRecursivo(tnC));
                }
            }
            return list;
        }


        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("GrupoForm.aspx?id=" + Request["id"].ToString());
        }

        protected void btnLimpiar_Click(object sender, EventArgs e)
        {
            txtDscGrupo.Text = "";
            txtNombreGrupo.Text = "";
        }


    }
}